package com.plugin.manage.config;

/**
 * 动态数据源上下文持有者
 * 用于在运行时切换数据源
 * 当前项目使用单数据源，此类为将来双数据源扩展预留
 * 
 * @author mark
 * @date 2025-07-23
 */
public class DynamicDataSourceContextHolder {
    
    /**
     * 数据源标识保存在线程变量中，避免多线程操作数据源时互相干扰
     */
    private static final ThreadLocal<String> CONTEXT_DATASOURCE_HOLDER = new ThreadLocal<>();
    
    /**
     * 数据源类型
     */
    public static final String MASTER = "master";
    public static final String SLAVE = "slave";
    
    /**
     * 设置数据源
     * @param dataSource 数据源标识
     */
    public static void setDataSource(String dataSource) {
        CONTEXT_DATASOURCE_HOLDER.set(dataSource);
    }
    
    /**
     * 获取数据源
     * @return 数据源标识
     */
    public static String getDataSource() {
        return CONTEXT_DATASOURCE_HOLDER.get();
    }
    
    /**
     * 清除数据源
     */
    public static void clearDataSource() {
        CONTEXT_DATASOURCE_HOLDER.remove();
    }
    
    /**
     * 设置主数据源
     */
    public static void setMaster() {
        setDataSource(MASTER);
    }
    
    /**
     * 设置从数据源
     */
    public static void setSlave() {
        setDataSource(SLAVE);
    }
}
